package biblio.metier;

import java.util.ArrayList;
import java.util.Date;

import biblio.exception.BiblioException;

public abstract class Utilisateur extends Personne {
	private String idUtilisateur;
	private String pwd;
	private String pseudonyme;
	private ArrayList<EmpruntEnCours> empruntsEnCours;
	
	public Utilisateur(String nom, String prenom, Date dateNaissance,
			String sexe, String idUtilisateur, String pwd, String pseudonyme) {
		super(nom, prenom, dateNaissance, sexe);
		this.idUtilisateur = idUtilisateur;
		this.pwd = pwd;
		this.pseudonyme = pseudonyme;
		
		empruntsEnCours = new ArrayList<EmpruntEnCours>();
	}

	public Utilisateur(String nom, String prenom, String idUtilisateur) {
		super(nom, prenom);
		this.idUtilisateur = idUtilisateur;
		
		empruntsEnCours = new ArrayList<EmpruntEnCours>();
	}
	
	public String getIdUtilisateur() {
		return idUtilisateur;
	}

	public void setIdUtilisateur(String idUtilisateur) {
		this.idUtilisateur = idUtilisateur;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getPseudonyme() {
		return pseudonyme;
	}

	public void setPseudonyme(String pseudonyme) {
		this.pseudonyme = pseudonyme;
	}

	public void addEmpruntEnCours(EmpruntEnCours ep) throws BiblioException {
		empruntsEnCours.add(ep);
	}
	
	public void removeEmpruntEnCours(EmpruntEnCours ep){
		empruntsEnCours.remove(ep);
	}
	
	public ArrayList<EmpruntEnCours> getEmpruntsEnCours() {
		return empruntsEnCours;
	}

	public int getNbEmpruntsEnCours() {
		return empruntsEnCours.size();
	}
	
	abstract public int getNbRetards();

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((idUtilisateur == null) ? 0 : idUtilisateur.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Utilisateur other = (Utilisateur) obj;
		if (idUtilisateur == null) {
			if (other.idUtilisateur != null)
				return false;
		} else if (!idUtilisateur.equals(other.idUtilisateur))
			return false;
		return true;
	}
}